جزوه · فصل نهم · جلسه ۸۳ · نمایش پیام و آرگومان‌ها ← بازگشت به فهرست
📘 فصل نهم · جلسه ۸۳ نمایش پیام، متغیرها و آرگومان‌ها
📅 تاریخ: چهارشنبه، ۳ شهریور ۱۴۰۵ 👤 مدرس: محمد عابدینی 🐚 Zsh · 🐧 Debian (کالی) · 📦 Red Hat
این جلسه یکی از مباحث پایه‌ای و مهم در اسکریپت‌نویسی است. فرمان echo، تفاوت نقل قول‌ها، متغیرها و آرگومان‌های خط فرمان حتماً در آزمون می‌آید.
📜 قبل از شروع، یه مثال ساده:

فرض کن می‌خوای به یه دوست پیام بدی. می‌تونی از کلمات معمولی استفاده کنی، یا با علامت‌های خاص مثل ! یا ؟ به پیامت حالت بدی. توی لینوکس، echo مثل همون پیام‌رسان هست و نقل قول‌ها ('' و "") مثل علائم خاص هستن که رفتار پیام رو تغییر می‌دن. این جلسه بهت یاد میده چطور با این ابزارها پیام‌های حرفه‌ای بفرستی!

▍ نمایش پیام با echo

echo یکی از پرکاربردترین دستورات در اسکریپت‌نویسی است که برای نمایش پیام در خروجی استاندارد (ترمینال) استفاده می‌شود.

┌──(ya3in㉿kali)-[~] └─$ echo "Hello, World!" Hello, World!

▍ تفاوت نقل قول‌ها (Quotes) در echo

در echo، نوع نقل قول (Single Quote یا Double Quote) تأثیر مستقیمی بر روی نحوه نمایش متن دارد:

🔵 Double Quote (")

  • متغیرها ($VAR) را تفسیر می‌کند.
  • دستورات داخل $() را اجرا می‌کند.
  • کاراکترهای خاص مثل \n را تفسیر می‌کند (با -e).

🔴 Single Quote (')

  • همه چیز را به صورت متن ساده چاپ می‌کند.
  • متغیرها ($VAR) را تفسیر نمی‌کند.
  • دستورات داخل $() را اجرا نمی‌کند.

🟢 Backtick (`) یا $()

  • برای اجرای دستورات استفاده می‌شود.
  • خروجی دستور را به عنوان متن جایگزین می‌کند.
  • $(command) روش مدرن‌تر است.
نکته امتحانی: Single Quote (') همه چیز را خام (Literal) چاپ می‌کند، اما Double Quote (") متغیرها و دستورات را تفسیر می‌کند.

• مثال‌های عملی

┌──(ya3in㉿kali)-[~] └─$ name="Ali" └─$ echo "Hello $name" Hello Ali └─$ echo 'Hello $name' Hello $name

توضیح: Double Quote (") متغیر $name را به «Ali» تبدیل می‌کند، اما Single Quote (') آن را به صورت $name چاپ می‌کند.

┌──(ya3in㉿kali)-[~] └─$ echo "Today is $(date +%A)" Today is Thursday └─$ echo 'Today is $(date +%A)' Today is $(date +%A)

توضیح: Double Quote (") دستور $(date +%A) را اجرا می‌کند، اما Single Quote (') آن را به صورت متن چاپ می‌کند.

برای اجرای دستورات داخل متن، از $(command) یا `command` استفاده کنید.

▍ متغیرها در Shell Script

در اسکریپت‌های شل، می‌توانید متغیرها را تعریف کرده و از آنها استفاده کنید. متغیرها به دو دسته تقسیم می‌شوند:

#!/bin/bash # نمایش اطلاعات کاربر echo "User info for userid: $USER" echo "UID: $UID" echo "HOME: $HOME"
#!/bin/bash # تعریف متغیرها days=10 guest="Katie" echo "$guest checked in $days days ago"

توضیح: متغیرهای days و guest تعریف شده و در خروجی استفاده می‌شوند.

برای دسترسی به مقدار یک متغیر، از $ قبل از نام متغیر استفاده کنید.

▍ آرگومان‌های خط فرمان (Command Line Arguments)

آرگومان‌های خط فرمان ورودی‌هایی هستند که هنگام اجرای اسکریپت به آن داده می‌شوند. این آرگومان‌ها با شماره قابل دسترسی هستند:

📝 مثال ساده (برای درک بهتر):

فرض کن اسکریپت test.sh رو با دستور ./test.sh Ali 5 اجرا می‌کنی. در این صورت:

  • $0 = ./test.sh
  • $1 = Ali
  • $2 = 5
#!/bin/bash # تست آرگومان‌های خط فرمان echo "Script name: $0" echo "First argument: $1" echo "Second argument: $2" echo "Total arguments: $#" echo "All arguments: $@"
┌──(ya3in㉿kali)-[~] └─$ ./test.sh Barbara 4 Script name: ./test.sh First argument: Barbara Second argument: 4 Total arguments: 2 All arguments: Barbara 4
نکته امتحانی: $1, $2, ... برای دسترسی به آرگومان‌های خط فرمان استفاده می‌شوند. $0 نام اسکریپت است.

▍ مثال کامل از اسکریپت شما

اسکریپتی که نوشته‌اید:

#!/bin/bash # testing command line arguments echo $1 checked in $2 days ago

توضیح کامل:

📝 اجرای اسکریپت:

اگر اسکریپت را با ./test.sh Barbara 4 اجرا کنید، خروجی به این شکل خواهد بود:

┌──(ya3in㉿kali)-[~] └─$ ./test.sh Barbara 4 Barbara checked in 4 days ago
💡 نکته: اگر به اسکریپت آرگومان ندهید، متغیرهای $1 و $2 خالی خواهند بود و پیام ناقص چاپ می‌شود.

▍ خلاصه جدول نقل قول‌ها

نوع نقل قول تفسیر متغیرها اجرای دستورات مثال
Single Quote (') ❌ خیر ❌ خیر echo '$HOME'$HOME
Double Quote (") ✅ بله ✅ بله echo "$HOME"/home/ya3in
Backtick (`) - ✅ بله (قدیمی) echo `date`
$() - ✅ بله (مدرن) echo $(date)
✅ جمع‌بندی نهایی:
  • echo → نمایش پیام در ترمینال.
  • Single Quote (') → همه چیز را به صورت خام چاپ می‌کند.
  • Double Quote (") → متغیرها و دستورات را تفسیر می‌کند.
  • $() → برای اجرای دستورات و جایگزینی خروجی آنها.
  • متغیرها: با name="value" تعریف و با $name استفاده می‌شوند.
  • آرگومان‌ها: $1, $2, ... برای دریافت ورودی از خط فرمان.